一、nginx简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好

二、nginx+tomcat搭配

1、nginx + tomcat的配置,这个至于版本的选择看你们自己,按理来说应该是通用的… 其中 nginx 配置如下

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 801;
server_name localhost;
location /planeApi {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_pass http://127.0.0.1:8095;
}
}

2、tomcat server.xml 添加如下配置,tomcat 的webapp下的war包名字改为 planeApi.war

1
<Context path="/" docBase="C:\software\apache-tomcat-8.5.24\webapps" reloadable="true" />

如上,我们在访问 http://localhost:801/planeApi 时会被nginx 转发到 http://localhost:8095 上,即我们访问 http://localhost:801/planeApi/test 就是访问 http://localhost:8095/planeApi/test
有个小方法,我们不需要配置tomcat里面的server.xml文件,那就是直接把 war 包文件的名字修改为 ROOT.war,当然,这样修改的话,访问 http://localhost:801/planeApi/test 就是访问 http://localhost:8095/test

三、nginx 本身配置

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name localhost;
location /plane {
root test;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

如上,我们访问 http://localhost/plane 时就会访问到 nginx 根目录下的 test/plane目录下的文件,即访问的是 http://localhost/plane/index.html
这里出了一个坑,如下图,nginx 自身有一个默认的server配置,它也是监听的localhost 80 端口,然后因为优先级顺序,以及 location配置的关系,导致我们在访问 http://localhost/plane 时,它去 nginx 的 html 目录下找 plane 目录了,当然,这是肯定找不到的,会报错404……

在这里插入图片描述

四、nginx 的 location 常用的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
location = / {

精确匹配,必须是127.0.0.1/

}

location / {

什么都可以匹配
http://localhost/register11
http://localhost/register111

}

location = /login {

精确匹配,必须是127.0.0.1/login

}

location ^~ /static/ {

非精确匹配,并且不区分大小写,
比如 http://127.0.0.1/static/js,http://localhost/static/a.html

}

location ~ \.(gif|jpg|png|js|css)$ {

区分大小写,以gif,jpg,js结尾
比如 http://localhost/a.gif, http://localhost/b.jpg

}

location ~* \.png$ {

不区分大小写,匹配.png结尾的
比如 http://localhost/b.png

}

location !~ \.xhtml$ {

区分大小写,匹配不以.xhtml结尾的
比如 http://localhost/a.xhtml 会被排除掉

}

location !~* \.xhtml$ {

不区分大小写,匹配不以.xhtml结尾的
比如 http://localhost/a.XHTML,http://localhost/a.xhtml 都会被排除掉

}

五、alias、root 的区别

1
2
3
location /plane {
alias /test/;
}

如上,访问 /plane/ 里面的文件时,nginx 则会去 /tets/ 目录下找文件,alias 是一个目录别名的定义,alias 后面必须用 / 结束,否则找不到文件,到时候会懵逼的……

1
2
3
location /plane {
root test;
}

如上,访问 /plane/ 里面的文件时,nginx 则会去 /tets/plane/ 目录下找文件,root 是 最上层根目录的定义,后面的 / 可有可无,不重要,也不影响……